package com.ft.controller;
import com.ft.domain.User;
import com.ft.service.UserService;
import com.ft.utils.Code;
import com.ft.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author ft
 * @since 2022-06-01
 */
@CrossOrigin//解决跨域问题
@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    UserService userService;
    /**
     * 登录校验
     * @param user ：请求参数
     * @param req
     * @param
     */
    @PostMapping("/login")
    public Result login(@RequestBody User user, HttpServletRequest req){
        User user1 = userService.loginCheckUser(user.getName(),user.getPassword());
        if(user1 != null && user.getName().equals(user1.getName())&& user.getPassword().equals(user1.getPassword())){
            req.getSession().setAttribute("username",user1.getName());
            return new Result(Code.POST_OK,user1,"登录成功！");
        }else {
            return new Result(Code.POST_ERR,"登录失败！");
        }
    }

    /**
     * 注册接口
     * @param user 传入的用户信息
     * @param req 请求对象
     * @return 返回对应的是否注册成功的信息
     */
    @PostMapping()
    public Result addUser(@RequestBody User user,HttpServletRequest req){
        System.out.println("进入了");
        int b = userService.addUser(user);
        System.out.println(b);
        if (b == 0) {
            return new Result(Code.POST_OK, "注册成功！");
        }else if (b == 1){
            return new Result(Code.POST_ERR, "注册失败！");
        }else {
            return new Result(Code.POST_ERR, "用户名以存在！");
        }
    }

    /**
     *查询所有state状态不为2的用户，为2是逻辑删除
     * @return 返回没有删除的所用用户
     */
    @GetMapping("")
    public Result selectAll(){
        List<User> users = userService.selectAll();
        System.out.println(users);
        return new Result(Code.GET_OK,users,"查询全部信息成功");
    }

    /**
     * 删除用户，做逻辑删除，设置用户state为2
     * @param id 要删除的id
     * @return 返回删除结果
     */
    @DeleteMapping("/{id}")
    public Result deleteUser(@PathVariable int id){
        int i = userService.deleteUser(id);
        if(i == 1){
            return new Result(Code.DELETE_OK, "删除成功");
        }else {
            return new Result(Code.DELETE_ERR, "删除失败！");
        }
    }

    /**
     * 修改用户信息
     * @param user 修改的用户信息
     * @return 返回修改的结果
     */
    @PutMapping("")
    public Result updateUser(@RequestBody User user) {
        user.setUpdateTime(String.valueOf(new Timestamp(System.currentTimeMillis())));
        int i = userService.updateUser(user);
        if (i == 1) {
            return new Result(Code.PUT_OK, "修改成功");
        }else {
            return new Result(Code.PUT_ERR, "修改失败");
        }
    }

    /**
     * 根据传入的页码查询页面的数据
     * @param page 要查询的第几页的页码
     * @return 返回查询的List结果集
     */
    @GetMapping("/{page}")
    public List<User> selectDataByPage(@PathVariable int page) {
        List<User> users = userService.selectDataByPage(page);
        return users;
    }

    /**
     * 查询已经逻辑删除的用户
     * @return 返回查询的list集合
     */
    @GetMapping("/state")
    public Result selectByUserState(){
        List<User> users = userService.selectByState();
        System.out.println(users);
        return new Result(Code.GET_OK, users,"查询成功");
    }
}

